perm filename MAP.SAI[1,BGB] blob
sn#101482 filedate 1974-05-11 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 COMMENT ENTRY MAPMAK,MAPOUT,SCROLL
C00009 00003 α WINDOWS
C00010 00004 IF MODE THEN
C00012 00005 IF MODE LAND 2 THEN
C00014 00006 α DISPLAY GRID LINES
C00016 00007 IF MODE LAND 2 THEN
C00018 00008 INTERNAL PROCEDURE MAPOUT
C00019 00009 INTERNAL PROCEDURE SCROLL
C00021 ENDMK
C⊗;
COMMENT ENTRY MAPMAK,MAPOUT,SCROLL;
BEGIN "MAP"
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
REQUIRE "SAITRG[SYS,BGB]" SOURCE_FILE;
REQUIRE "DD[DD,BGB]" SOURCE_FILE;
PRELOAD_WITH
.0000000 , .0000000 ,
-22.99979 , .1983643@-3 ,
-9.999536 , 24.00117 ,
-35.00020 , 24.00084 ,
-712.0187 , -443.3171 ,
-691.9509 , -422.8889 ,
-497.3859 , -520.2375 ,
-488.6137 , -495.7614 ,
-366.4894 , -154.9892 ,
-190.9379 , -471.5671 ,
-178.3295 , -494.3053 ,
-245.2496 , -373.6192 ,
-188.2198 , -277.2269 ,
-360.5054 , 23.74415 ,
-35.00002 , 349.0006 ,
-22.99968 , 349.0002 ,
326.0002 , .8583069@-4 ,
68.04084 , -319.0442 ,
-66.12744 , -400.6094 ,
-81.03539 , -377.9573 ,
-32.70698 , -334.5225 ,
-34.62691 , -325.1313 ,
-94.93315 , -315.5374 ,
-112.9524 , -334.3569 ,
-107.2662 , -368.7936 ,
-81.03539 , -377.9573 ,
-228.6772 , -198.7850 ,
-225.2093 , -218.1996 ,
-9.999530 , -299.9990 ,
-.6103516@-4 , -300.0000 ,
163.3915 , -251.6002 ,
-143.3514 , -100.3745 ,
-206.9260 , -179.8771 ,
-248.7328 , -174.0623 ,
-270.1300 , -169.1523 ,
-296.0756 , -128.1069 ,
-225.4402 , -90.54885 ,
-262.5410 , -19.67216 ,
-257.3356 , -19.28266 ,
-235.1683 , 106.1126 ,
-201.4372 , 113.5536 ,
-248.2218 , 112.0019 ,
-252.7818 , 103.1024 ,
-262.0469 , 106.8675 ,
-282.0767 , 22.83371 ,
-292.0447 , 23.64030 ,
-302.0428 , 23.43554 ,
-321.9830 , 19.57827 ,
-327.9778 , -59.97264 ,
-332.1181 , -57.17142 ,
-337.1169 , -57.01620 ,
-347.0000 , 24.00042 ,
-339.4767 , 92.10479 ,
-335.0025 , 88.10585 ,
-329.3224 , 89.21445 ,
-309.3915 , 92.43884 ,
-298.3050 , 165.6742 ,
-276.2897 , 153.8287 ,
-277.0167 , 178.8179 ,
-234.6786 , 184.5172 ,
-196.5484 , 194.2015 ,
-179.5380 , 210.4702 ,
-169.1679 , 198.4892 ,
-157.2133 , 207.5492 ,
-134.5305 , 220.1497 ,
-141.8876 , 232.1902 ,
-124.8248 , 242.6234 ,
-142.9540 , 251.0708 ,
-139.0740 , 259.3903 ,
-149.9487 , 264.4620 ,
-177.9614 , 227.5139 ,
-205.7761 , 203.2610 ,
-229.5678 , 244.2995 ,
-237.8086 , 197.1925 ,
-257.6296 , 194.5243 ,
-251.3819 , 208.1616 ,
-264.0584 , 216.1807 ,
-34.99987 , 323.0004 ,
-22.99999 , 323.0008 ,
300.0008 , .3929138@-3 ,
299.6896 , -15.56232 ,
284.7106 , -14.78171 ,
283.4387 , -29.78943 ,
174.0408 , -18.29135 ,
117.4829 , -550.9601 ,
-249.6434 , 310.9497 ,
-781.9525 , 14.23944 ,
-707.9570 , 15.09746 ,
-93.11935 , -368.4996 ,
-98.57252 , -330.0892 ,
-34.97943 , -330.1192 ,
-257.1021 , -161.7186 ,
-215.8161 , -206.5051 ,
-155.7823 , 205.6606 ;
REAL ARRAY LOCII[0:93,1:2];
PRELOAD_WITH
4, 5,
5, 7,
4, 6,
28, 29,
77, 78,
14, 15,
58, 59,
60, 61,
64, 93,
63, 93,
64, 65,
68, 69,
70, 71,
73, 74,
39, 41,
37, 38,
31, 33,
26, 32,
82, 83,
34, 35,
79, 80,
67, 68;
INTEGER ARRAY SEGS[1:22,1:2];
PRELOAD_WITH
7, 9, 8,
6, 10, 8,
9, 12, 11,
10, 18, 8,
19, 20, 84,
20, 21, 90,
21, 22, 2,
22, 23, 89,
23, 24, 11,
24, 25, 88,
27, 28, 2,
29, 30, 0,
17, 18, 84,
12, 13, 2,
80, 82, 81,
33, 34, 91,
26, 27, 92,
16, 17, 0,
78, 79, 1,
15, 16, 1,
76, 77, 3,
65, 67, 66,
61, 63, 62,
69, 70, 85,
71, 73, 72,
59, 60, 72,
56, 58, 57,
74, 76, 75,
55, 56, 40,
13, 14, 3,
46, 55, 87,
44, 46, 45,
43, 44, 0,
41, 43, 42,
38, 39, 0,
35, 37, 36,
48, 50, 49,
48, 47, 86,
47, 54, 87,
52, 54, 53,
51, 52, 3,
50, 51, 2;
INTEGER ARRAY ARCS[1:42,1:3];
α WINDOWS;
PRELOAD_WITH 0,0,480,512; SHORT INTEGER ARRAY DWN[1:4];
PRELOAD_WITH 0,0,1500,1200; SHORT REAL ARRAY LWN[1:4];
α PROPERTY LINE;
PRELOAD_WITH
-745,-465, 130,-900, 360,-710,
1170,140, 290,780, 100,870,
-510,470, -510,360, -540,210,
-595,50, -625,-30, -690,-305,
-705,-360, -745,-465;
INTEGER ARRAY PLINE[0:13,1:2];
INTEGER I,GRID,MODE,GRIDSF;
INTERNAL PROCEDURE MAPMAK;
BEGIN "MAPMAK"
SETWND(LWN,DWN);
IF MODE THEN
BEGIN
α DISPLAY PROPERTY LINE;
AI(PLINE[0,1],PLINE[0,2]);
FOR I←1 STEP 1 UNTIL 13 DO
AV(PLINE[I,1],PLINE[I,2]);
α OUTLINE OF THE BUILDING;
AI(0,0);
ARC(138,6*π/7,π/5);
ARC(258,6*π/7,π/5);
RADIAL(138,258,π/5);
RADIAL(138,258,37*π/35);
END;
IF MODE LAND 1 THEN
BEGIN "ROAD CENTER"
α DISPLAY THE ENTRY ROAD;
AI(-730.29,-422.96);
AV(-493.00,-508.00);
AI(-366.5,-154.99);
ARC(375,DMS(484334),-DMS(1094300));
ARC(375,DMS(214255),-DMS(605925));
AI(117.32,-550.64);
ARC(250,DMS(384144),DMS(1020145));
AI(-245.25,-373.62);
ARC(125,DMS(1202249),-DMS(605925));
α DISPLAY THE CIRCULAR ROAD;
AI(-35,24);ARC(312,π/2,π/2);
AI(-10,24);ARC(337,π/2,π);
AI(-23,0); ARC(336,π/2,0);
AI(0,0);ARC(313,-π/2,0);
AI(-10,-313);AV(0,-313);
AI(-35,336);AV(-23,336);
α DISPLAY THE PARKING LOT LANES;
AI(0,0);
RADIAL(186,313,-DMS(90000));
RADIAL(186,313,-DMS(510000));
RADIAL(186,255,π+DMS(844000));
RADIAL(186,329.17,π+DMS(380000));
ARC(186,-DMS(1330000),-DMS(90000));
ARC(255,-DMS(1330000),-DMS(90000));
END "ROAD CENTER";
IF MODE LAND 2 THEN
BEGIN "LAMP ISLANDS"
REAL ARRAY QQ[1:6];
REAL DEL,INNER,OUTER,SIGN;
INTEGER I;
QQ[1] ← -DMS(125000);
QQ[2] ← -DMS(471000);
QQ[3] ← -DMS(545000);
QQ[4] ← π + DMS(883000);
QQ[5] ← π + DMS(805000);
QQ[6] ← π + DMS(415000);
DEL ← DMS(5000);
INNER ← DMS(1752000);
OUTER ← DMS(1814000);
FOR I←1 STEP 1 UNTIL 6 DO
BEGIN
AI(0,0);
RADIAL(201.82,239.46,QQ[I]-DEL);
RADIAL(201.82,239.46,QQ[I]+DEL);
RADIAL(201.94,201.94,QQ[I]);
ARC(2.94,INNER,QQ[I]+π-INNER/2);
AI(0,0);
RADIAL(239.51,239.51,QQ[I]);
ARC(3.49,-OUTER,QQ[I]+OUTER/2);
END;
QQ[1] ← -DMS(133000);
QQ[2] ← -DMS(463000);
QQ[3] ← -DMS(553000);
QQ[4] ← π + DMS(423000);
INNER ← DMS(1770000);
OUTER ← DMS(870000);
DEL ← DMS(13000);
FOR I←1 STEP 1 UNTIL 4 DO
BEGIN
AI(0,0);RADIAL(274.18,274.18,QQ[I]);
ARC(7.18,INNER,QQ[I]+DEL+π/2);
SIGN ← (IF I LAND 1 THEN 1 ELSE -1);
AI(0,0);
RADIAL(274,289.0 ,QQ[I]-SIGN*DEL);
IF I=4 THEN DONE;
RADIAL(274,285.786,QQ[I]+SIGN*DEL);
RADIAL(285,285,QQ[I]-SIGN*DEL);
ARC(15,SIGN*OUTER,QQ[I]-SIGN*DEL);
END;
AI(0,0);
ARC(175,-DMS(1390000),-DMS(60000));
ARC(289,-π/6,-π/12);
ARC(300,-π/6,-π/12);
ARC(289,DMS(790000),π+DMS(440000));
END "LAMP ISLANDS";
α DISPLAY GRID LINES;
IF ¬GRIDSF THEN
BEGIN "GRID"
REAL Q,X,Y,XL,XH,YL,YH;
INTEGER I;
Q ← LWN[3]/4;
GRID ← IF Q < 1 THEN 1 ELSE
IF Q < 5 THEN 5 ELSE
IF Q < 10 THEN 10 ELSE
IF Q < 25 THEN 25 ELSE
IF Q < 50 THEN 50 ELSE
IF Q < 100 THEN 100 ELSE
IF Q < 200 THEN 200 ELSE
IF Q < 500 THEN 500 ELSE
IF Q < 1000 THEN 1000 ELSE
IF Q < 2000 THEN 2000 ELSE
IF Q < 5280 THEN 5280 ELSE 10560;
AI(LWN[1],LWN[2]+5);AV(LWN[1],LWN[2]-5);
AI(LWN[1]-5,LWN[2]);AV(LWN[1]+5,LWN[2]);
α COMPUTE THE GRID WINDOW SO THAT IT LIES ON ABSOLUTE GRID MULTIPLES;
I ← LWN[1]/GRID;
XL ← (I-3)*GRID;
XH ← XL + 6*GRID;
I ← LWN[2]/GRID;
YL ← (I-3)*GRID;
YH ← YL + 6*GRID;
α VERTICALS;
X ← XL;
FOR I←-3 STEP 1 UNTIL 3 DO
BEGIN
AI(X,YL);
AV(X,YH);
X ← X + GRID;
END;
α HORIZONTALS;
Y ← YL;
FOR I←-3 STEP 1 UNTIL 3 DO
BEGIN
AI(XL,Y);
AV(XH,Y);
Y ← Y + GRID;
END;
END "GRID";
IF MODE LAND 2 THEN
BEGIN "PAVEMENT"
INTEGER I;
α SEGMENTS;
FOR I←1 STEP 1 UNTIL 22 DO
BEGIN
INTEGER P1,P2;
P1 ← SEGS[I,1];
P2 ← SEGS[I,2];
AI(LOCII[P1,1],LOCII[P1,2]);
AV(LOCII[P2,1],LOCII[P2,2]);
END;
α ARCS;
FOR I←1 STEP 1 UNTIL 42 DO
BEGIN
REAL X,Y,X1,Y1,X2,Y2;
REAL RR,R,A,B;
INTEGER P1,P2,P3;
P1 ← ARCS[I,1];
P2 ← ARCS[I,2];
P3 ← ARCS[I,3];
X ← LOCII[P3,1];
Y ← LOCII[P3,2];
X1 ← LOCII[P1,1]-X;
Y1 ← LOCII[P1,2]-Y;
X2 ← LOCII[P2,1]-X;
Y2 ← LOCII[P2,2]-Y;
RR ← X1↑2 + Y1↑2;
R ← SQRT(RR);
A ← ACOS((X1*X2+Y1*Y2)/RR);
B ← ATAN2(Y1,X1);
A ← (IF X1*Y2 < X2*Y1 THEN -A ELSE A);
AI(X,Y);
ARC(R,A,B);
END;
END "PAVEMENT";
END "MAPMAK";
INTERNAL PROCEDURE MAPOUT;
BEGIN "MAPOUT"
SHOWDD(0);
IF ¬GRIDSF THEN BEGIN
DDSTRC(450,230,0,CVS(GRID)&" FOOT GRID");
DDSTRC(235,276,0,CVS(LWN[1])&","&CVS(LWN[2]));END;
END "MAPOUT";
INTERNAL PROCEDURE SCROLL;
BEGIN "SCROLL"
LABEL L1,L2;
DEFINE X="LWN[1]";
DEFINE Y="LWN[2]";
DEFINE DX="LWN[3]";
DEFINE DY="LWN[4]";
INTEGER CHR,DELPOW;
MODE ← 1;
MAPMAK;
MAPOUT;
L1: CHR ← INCHRW;
IF CHR='175 THEN BEGIN OUTSTR(↓&"*");RETURN;END;
IF CHR=13 THEN OUTCHR(".") ELSE
IF CHR="\" THEN DELPOW←(DELPOW-1)MAX 0 ELSE
IF CHR="/" THEN DELPOW← DELPOW+1 ELSE GO L2;GO L1;
DEFINE DELTAX="DX/(1 LSH DELPOW)";
DEFINE DELTAY="DY/(1 LSH DELPOW)";
L2: IF CHR=":" THEN X←X + DELTAX ELSE
IF CHR=";" THEN X←X - DELTAX ELSE
IF CHR="(" THEN Y←Y - DELTAY ELSE
IF CHR=")" THEN Y←Y + DELTAY ELSE
IF CHR="-" THEN BEGIN DX←DX/2;DY←DY/2;END ELSE
IF CHR="*" THEN BEGIN DX←DX*2;DY←DY*2;END ELSE
IF CHR="," THEN GRIDSF←¬GRIDSF ELSE
IF CHR="." THEN MODE←(MODE+1)LAND 3 ELSE GO L1;
MAPMAK;MAPOUT;
GO L1;
END "SCROLL";
WHILE TRUE DO SCROLL;
END "MAP";